﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MVC3Razor.Models;

namespace MVC3Razor.Controllers
{
    public class DatosUserDBController : Controller
    {
        DataDBModeloDataContext usuariosDB = new DataDBModeloDataContext();
        
        public ActionResult UsuariosListDB()
        {
            try
            {
                var us = from f in usuariosDB.UsersDB orderby f.idUser ascending select f;
                return View(us);
            }
            catch (Exception)
            {
                return View();
            }
            
        }

        // Creamos un ActionResult para el detalle de nuestros usuarios
        public ActionResult DetailsUser(string id)
        {
            try
            {
                var us = (from f in usuariosDB.UsersDB where f.idUser == Convert.ToInt32(id) select f).Single();
                return View(us);
            }
            catch (Exception)
            {
                ViewBag.error = "No se pueden ver los detalles de este usuario";
                return View("UsuariosListDB", usuariosDB.UsersDB.ToList());
            }            
        }

        // Creamos un ActionResult para la edicion del usuario
        public ViewResult EditUser(string id)
        {
            try
            {
                UsersDB us = (from f in usuariosDB.UsersDB where f.idUser == Convert.ToInt32(id) select f).Single();
                return View(us);
            }
            catch (Exception)
            {
                ViewBag.error = "No se puede editar este usuario";
            }
            return View("UsuariosListDB", usuariosDB.UsersDB.ToList());      
        }

        // Creamos la respuesta de la edición cuando se haga un post.
        [HttpPost]
        public ViewResult EditUser(int id, FormCollection collection)
        {            
            try
            {
                var uss = usuariosDB.UsersDB.Single(x => x.idUser == id);
                uss.FirstName = collection["FirstName"].ToString();
                uss.LastName = collection["LastName"].ToString();
                uss.UserName = collection["UserName"].ToString();
                uss.City = collection["City"].ToString();
                usuariosDB.SubmitChanges();
            }
            catch (Exception)
            {
                ViewBag.error = "No se pudo guardar los datos de este usuario";                
            }
            

            return View("UsuariosListDB",usuariosDB.UsersDB.ToList());
        }

        // Creamos la Page de Creación de Usuario
        public ViewResult CreateUser()
        {            
            return View(new  UsersDB());
        }

        [HttpPost]
        public ViewResult CreateUser(FormCollection collection)
        {            
            // Consultamos si existe
            if (usuariosDB.UsersDB.Single(x => x.UserName == collection["UserName"].ToString()) == null)
            {
                UsersDB uss = new UsersDB
                {
                    UserName = collection["UserName"].ToString(),
                    FirstName = collection["FirstName"].ToString(),
                    LastName = collection["LastName"].ToString(),
                    City = collection["City"].ToString()
                };
                usuariosDB.UsersDB.InsertOnSubmit(uss);
                usuariosDB.SubmitChanges();
            }
            else
            {
                ViewBag.error = "Este usuario ya existe en la base de datos";
            }
            return View("UsuariosListDB",usuariosDB.UsersDB.ToList());
        }

        // Creamos la Page de Eliminar Usuario
        public ViewResult DeleteUser(int id)
        {            
            return View(usuariosDB.UsersDB.Single(x => x.idUser == Convert.ToInt32(id)));
        }
        [HttpPost]
        public RedirectToRouteResult DeleteUser(string id)
        {            
            try
            {
                var uss = usuariosDB.UsersDB.Single(x => x.idUser == Convert.ToInt32(id));
                usuariosDB.UsersDB.DeleteOnSubmit(uss);
                usuariosDB.SubmitChanges();
            }
            catch (Exception)
            {
                ViewBag.error = "El usuario no se pudo borrar";                
            }
            
            return RedirectToAction("UsuariosListDB");
        }
    }
}
